package com.tdam2011.grupo04.SMSWeb;

import java.util.ArrayList;
import java.util.List;

import android.content.Intent;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.Filter;
import android.widget.Filterable;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.AdapterView.OnItemClickListener;

import com.tdam2011.grupo04.MasterListActivity;
import com.tdam2011.grupo04.R;
import com.tdam2011.grupo04.Sql;
import com.tdam2011.grupo04.entidades.Contacto;
import com.tdam2011.grupo04.entidades.ListaContactos;

public class ListaContactosWeb extends MasterListActivity implements OnItemClickListener{
	private ContactoWebAdapter adapter;
	private String usuario;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
	        super.onCreate(savedInstanceState);
	        setContentView(R.layout.agenda);

	        adapter= new ContactoWebAdapter();
	        setListAdapter(adapter);
	        
	        this.getListView().setOnItemClickListener(this);
	        this.getListView().setTextFilterEnabled(true);
	        
	        SharedPreferences app_preferences = getSharedPreferences("usuarioRegistrado", MODE_PRIVATE);
			usuario= app_preferences.getString("usuario", null);
	}
	
	protected void onResume(){
		super.onResume();
		cargarContactosWeb();
	}
	
	@Override
	protected void publishFilterApplied() {
		super.publishFilterApplied();
		this.cargarContactosWeb();
	}
	
	private void cargarContactosWeb(){
		Sql sql = new Sql(this);		
		Cursor cur = sql.getUsers(usuario);
		
		adapter.clearList();
		
		if (cur.getCount() > 0) {
			while (cur.moveToNext()){
				String usuario = cur.getString(cur.getColumnIndex("usuario"));
				String idContacto= cur.getString(cur.getColumnIndex("idcontacto"));
				
				Contacto contactoWeb= new Contacto();
				if(!idContacto.equals("0")){
					List<Contacto> contactos= new ListaContactos().getContactos("DISPLAY_NAME ASC", this);
					for(Contacto contacto : contactos){
						if(contacto.getId().equals(idContacto)){
							contactoWeb= contacto;
							break;
						}
					}
				}
				if((usuario != null) && (!contactFilterApplied || usuario.toLowerCase().startsWith(contactFilter))) {														
					contactoWeb.setUsuario(usuario);
					adapter.addContacto(contactoWeb);
				}
			}			
		}
		cur.close();
		sql.close();
		adapter.notifyDataSetChanged();
	}
	
	class ContactoWebAdapter extends BaseAdapter implements Filterable{
		private ArrayList<Contacto> contactos;
		private LayoutInflater inflater;		
		private ContactFilter filter;

		public ContactoWebAdapter() {
			contactos = new ArrayList<Contacto>();
			inflater = LayoutInflater.from(ListaContactosWeb.this);
		}

		public void addContacto(Contacto contacto) {
			if (contacto != null) 
				this.contactos.add(contacto);
		}
		
		public int getCount() {
			return contactos.size();
		}
		
		public Object getItem(int position) {
			return contactos.get(position);
		}

		public long getItemId(int position) {
			return position;
		}
		
		public void clearList(){
			contactos.clear();
		}

		class Holder {
			private ImageView img_contacto;
			private TextView txt_nombreContacto;
			private TextView txt_usuario;
			private ImageView img_siguiente; 
		}

		public View getView(final int position, View convertView, ViewGroup arg2){
			Holder holder;
			if (convertView == null) {
				convertView = inflater.inflate(R.layout.agenda_contacto , null);
				holder = new Holder();
				holder.txt_nombreContacto = (TextView) convertView
						.findViewById(R.id.txt_contacto);
				holder.img_contacto = (ImageView) convertView
						.findViewById(R.id.imagen_contacto);
				holder.txt_usuario = (TextView) convertView
						.findViewById(R.id.txt_telefono);
				holder.img_siguiente= (ImageView)convertView
						.findViewById(R.id.btn_agendaSiguiente); 
				convertView.setTag(holder);
			} else {
				holder = (Holder) convertView.getTag();
			}
			
			holder.img_siguiente.setVisibility(ImageView.GONE);
			
			Contacto contacto = (Contacto) getItem(position);
			
			String label= (contacto.getNombre() == null)? contacto.getUsuario() :contacto.getNombre(); 
			holder.txt_nombreContacto.setText(label);
			
			holder.txt_usuario.setVisibility(TextView.VISIBLE);
			holder.txt_usuario.setText(contacto.getUsuario());

			if (contacto.getTieneFoto()) holder.img_contacto.setImageURI(contacto.getFoto());
			
			return convertView;
		}
		
		@Override
		public Filter getFilter() {
			if (filter == null) {
				filter = new ContactFilter();
			}
			return filter;
		}
	}
	
	@Override
	public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
		// TODO Auto-generated method stub
		Contacto contacto= (Contacto)adapter.getItem(position);
		Intent webContactIntent= new Intent(ListaContactosWeb.this, MensajeWeb.class);
		webContactIntent.putExtra("labelUsuario", contacto.getNombre());
		webContactIntent.putExtra("usuario", contacto.getUsuario());
		webContactIntent.putExtra("idcontacto", contacto.getId());
		startActivityForResult(webContactIntent, HistorialMensajesWeb.RC_ENVIAR_MENSAJE);
	}
	
}
